-------------
-- 事务
-------------
-- 一篮子的增加、删除、修改的语句要么都执行，要么都回滚。T-Sql中的T，就是表示Transaction

--------------------------
-- 事务的四大属性
--------------------------
-- 原子性（Atomicity）
-- 一致性（Consistency）
-- 隔离性（Isolation）
-- 持久性（Durability）

--------------------------
-- 事务的语法格式
--------------------------
-- 开启事务：begin transaction
-- 回滚事务：rollback transaction
-- 提交事务：commit transaction

-------------
-- 例子
-------------

-- 使用事务处理：刘备存入10000块钱，刘备的卡号：6225125478544587
begin transaction 
declare @err int = 0
  update BankCard set CardBalance+=10000 where CardNo='6225125478544587'
  set @err+=@@error 

  insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)
                    values('6225125478544587',10000,0,getdate())
   set @err+=@@ERROR

 if @err=0
 begin
      print '打印成功' 
      commit transaction
 end
 else 

 begin
     print '执行失败，请检查数据是否有误'
	 rollback transaction
 end
  
  go
-- 使用事务处理：关羽取出1000块钱，关羽的卡号：6225547858741263

  select * from CardExchange
  select * from BankCard 

  begin transaction 
  declare @err int =0
  update BankCard set CardBalance-=1000 where CardNo='6225547858741263'
  set @err+=@@ERROR

  insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)
         values('6225547858741263',0,1000,getdate())
	set @err+=@@ERROR
 
 if @err=0
 begin 
   print '执行成功'
    commit transaction
 end
 else
 begin 
    print '执行失败，请检查数据是否有误'
   rollback  transaction
 end
 go
-- 张飞给刘备转账5000块钱，张飞的卡号：6225547854125656，刘备的卡号：6225125478544587
begin transaction 
  declare @err int =0
  update BankCard set CardBalance-=5000 where CardNo='6225547854125656'  --张飞
  set @err+=@@ERROR

  update BankCard set CardBalance+=5000 where CardNo='6225125478544587'  --刘备
  set @err+=@@ERROR

  insert into CardTransfer(CardNoOut,CardNoIn,TransferMoney,TransferTime)
         values('6225547854125656','6225125478544587',5000,getdate())
	set @err+=@@ERROR
 
 if @err=0
 begin 
   print '执行成功'
    commit transaction
 end
 else
 begin 
    print '执行失败，请检查数据是否有误'
   rollback  transaction
 end

 select * from CardTransfer
  select * from BankCard 

-- **请问事务4个隔离级别分别是什么？（高能预警）**

-- 原子性（Atomicity）
-- 一致性（Consistency）
-- 隔离性（Isolation）
-- 持久性（Durability）
